home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 December / MACPOWER-1997-12.ISO.7z / MACPOWER-1997-12.ISO / AMUG / PROGRAMMING / Raven 1.2 Examples.sit / Raven 1.2 Examples / Quill / Source / PenNode.cpp < prev    next >
Text File  |  1997-05-04  |  5KB  |  206 lines

  1. /*
  2.  *  File:       PenNode.cpp
  3.  *  Summary:       A node representing an SPen resource for use in a THierarchicalTable.
  4.  *  Written by: Jesse Jones
  5.  *
  6.  *  Copyright ゥ 1997 Jesse Jones. 
  7.  *    For conditions of distribution and use, see copyright notice in ZTypes.h  
  8.  *
  9.  *  Change History (most recent first):    
  10.  *
  11.  *         <1>     5/04/97    JDJ        Created
  12.  */
  13.  
  14. #include "PenNode.h"
  15.  
  16. #include <ZHandleStream.h>
  17. #include <ZStringUtils.h>
  18. #include <ZUndoableCommand.h>
  19.  
  20. #include "PenDialog.h"
  21.  
  22.  
  23. // ===================================================================================
  24. //    class CSetPenCommand
  25. // ===================================================================================
  26. class CSetPenCommand : public TUndoableCommand {
  27.  
  28.     typedef TUndoableCommand Inherited;
  29.  
  30. //-----------------------------------
  31. //    Initialization/Destruction
  32. //
  33. public:
  34.     virtual             ~CSetPenCommand();
  35.     
  36.                         CSetPenCommand(CResourceMap* rsrcMap, ResID id, const SPen& newPen);
  37.     
  38. //-----------------------------------
  39. //    Inherited API
  40. //
  41. public:
  42.     virtual string        GetText() const;
  43.  
  44. protected:
  45.     virtual void         OnDo();
  46.  
  47.     virtual void         OnUndo();
  48.  
  49.     virtual void         OnRedo();
  50.             
  51. //-----------------------------------
  52. //    Member data
  53. //
  54. protected:
  55.     CResourceMap*        mRsrcMap;
  56.     ResID                mID;
  57.     THandle                mOldData;
  58.     THandle                mNewData;
  59. };
  60.  
  61. //---------------------------------------------------------------
  62. //
  63. // CSetPenCommand::~CSetPenCommand
  64. //
  65. //---------------------------------------------------------------
  66. CSetPenCommand::~CSetPenCommand()
  67. {
  68. }
  69.  
  70.  
  71. //---------------------------------------------------------------
  72. //
  73. // CSetPenCommand::CSetPenCommand
  74. //
  75. //---------------------------------------------------------------
  76. CSetPenCommand::CSetPenCommand(CResourceMap* rsrcMap, ResID id, const SPen& newPen)
  77. {
  78.     ASSERT(rsrcMap != nil);
  79.     
  80.     mRsrcMap = rsrcMap;
  81.     mID = id;
  82.     
  83.     mOldData = mRsrcMap->GetResourceData(mID);
  84.     mOldData.Detach();
  85.     
  86.     TOutHandleStream stream;    
  87.     stream << newPen;
  88.     mNewData = stream.GetHandle();
  89. }
  90.  
  91.  
  92. //---------------------------------------------------------------
  93. //
  94. // CSetPenCommand::GetText
  95. //
  96. //---------------------------------------------------------------
  97. string CSetPenCommand::GetText() const
  98. {
  99.     return LoadIndString(256, 29);
  100. }
  101.  
  102.  
  103. //---------------------------------------------------------------
  104. //
  105. // CSetPenCommand::OnDo
  106. //
  107. //---------------------------------------------------------------
  108. void CSetPenCommand::OnDo()
  109. {
  110.     mRsrcMap->SetResourceData(mID, mNewData);
  111. }
  112.  
  113.  
  114. //---------------------------------------------------------------
  115. //
  116. // CSetPenCommand::OnUndo
  117. //
  118. //---------------------------------------------------------------
  119. void CSetPenCommand::OnUndo()
  120. {
  121.     mRsrcMap->SetResourceData(mID, mOldData);
  122. }
  123.  
  124.  
  125. //---------------------------------------------------------------
  126. //
  127. // CSetPenCommand::OnRedo
  128. //
  129. //---------------------------------------------------------------
  130. void CSetPenCommand::OnRedo()
  131. {
  132.     mRsrcMap->SetResourceData(mID, mNewData);
  133. }
  134.  
  135. #pragma mark -
  136.  
  137. // ===================================================================================
  138. //    class CPenNode
  139. // ===================================================================================
  140.  
  141. //---------------------------------------------------------------
  142. //
  143. // CPenNode::~CPenNode
  144. //
  145. //---------------------------------------------------------------
  146. CPenNode::~CPenNode()
  147. {
  148. }
  149.  
  150.  
  151. //---------------------------------------------------------------
  152. //
  153. // CPenNode::CPenNode (THierarchicalTable*, CResourceMap*)
  154. //
  155. //---------------------------------------------------------------
  156. CPenNode::CPenNode(THierarchicalTable* table, CResourceMap* rsrcMap) : CResourceNode(table, rsrcMap)
  157. {
  158. }
  159.  
  160.               
  161. //---------------------------------------------------------------
  162. //
  163. // CPenNode::CPenNode (THierarchicalTable*, TSubNode*, CResourceMap*, ResID)
  164. //
  165. //---------------------------------------------------------------
  166. CPenNode::CPenNode(THierarchicalTable* table, TSubNode* parent, CResourceMap* rsrcMap, ResID id) : CResourceNode(table, parent, rsrcMap, id)
  167. {
  168. }
  169.  
  170.  
  171. //---------------------------------------------------------------
  172. //
  173. // CPenNode::Make
  174. //
  175. //---------------------------------------------------------------
  176. CResourceNode* CPenNode::Make(TSubNode* parent, ResID id)
  177. {
  178.     return new CPenNode(mTable, parent, mRsrcMap, id);
  179. }
  180.  
  181.  
  182. //---------------------------------------------------------------
  183. //
  184. // CPenNode::EditResource
  185. //
  186. //---------------------------------------------------------------
  187. void CPenNode::EditResource()
  188. {
  189.     SPen oldPen, newPen;
  190.  
  191.     THandle data = mRsrcMap->GetResourceData(mID);
  192.     if (data.GetSize() > 0) {
  193.         TInHandleStream stream(data);    
  194.         
  195.         stream >> oldPen;
  196.     }
  197.         
  198.     if (CPenDialog::Pose(mRsrcMap->GetResourceName(mID), oldPen, &newPen)) {
  199.         TCommand* command = new CSetPenCommand(mRsrcMap, mID, newPen);
  200.         command->Post();
  201.     }
  202. }
  203.  
  204.  
  205.  
  206.